package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.TopicChangeRequest;

/**
 * 选题变更申请Service接口
 *
 * @author ltr
 * @date 2024-11-16
 */
public interface ITopicChangeRequestService
{
    /**
     * 查询选题变更申请
     *
     * @param requestId 选题变更申请主键
     * @return 选题变更申请
     */
    public TopicChangeRequest selectTopicChangeRequestByRequestId(Long requestId);

    /**
     * 查询选题变更申请列表（管理员使用）
     *
     * @param topicChangeRequest 选题变更申请
     * @return 选题变更申请集合
     */
    public List<TopicChangeRequest> selectTopicChangeRequestList(TopicChangeRequest topicChangeRequest);

    /**
     * 查询学生的变更申请列表
     *
     * @param studentId 学生ID
     * @return 选题变更申请集合
     */
    public List<TopicChangeRequest> selectChangeRequestListByStudentId(Long studentId);

    /**
     * 查询原教师需要审核的变更申请列表
     *
     * @param teacherId 教师ID
     * @return 选题变更申请集合
     */
    public List<TopicChangeRequest> selectPendingRequestsForOldTeacher(Long teacherId);

    /**
     * 查询新教师需要审核的变更申请列表
     *
     * @param teacherId 教师ID
     * @return 选题变更申请集合
     */
    public List<TopicChangeRequest> selectPendingRequestsForNewTeacher(Long teacherId);

    /**
     * 查询教师相关的所有变更申请列表（作为原教师或新教师）
     *
     * @param teacherId 教师ID
     * @return 选题变更申请集合
     */
    public List<TopicChangeRequest> selectChangeRequestListByTeacherId(Long teacherId);

    /**
     * 学生提交选题变更申请
     *
     * @param topicChangeRequest 选题变更申请
     * @return 结果
     */
    public int submitChangeRequest(TopicChangeRequest topicChangeRequest);

    /**
     * 学生取消选题变更申请
     *
     * @param requestId 申请ID
     * @param studentId 学生ID
     * @return 结果
     */
    public int cancelChangeRequest(Long requestId, Long studentId);

    /**
     * 原教师审核变更申请
     *
     * @param requestId 申请ID
     * @param teacherId 教师ID
     * @param opinion 审核意见（同意/拒绝）
     * @param reason 意见说明
     * @return 结果
     */
    public int reviewByOldTeacher(Long requestId, Long teacherId, String opinion, String reason);

    /**
     * 新教师审核变更申请
     *
     * @param requestId 申请ID
     * @param teacherId 教师ID
     * @param opinion 审核意见（同意/拒绝）
     * @param reason 意见说明
     * @return 结果
     */
    public int reviewByNewTeacher(Long requestId, Long teacherId, String opinion, String reason);

    /**
     * 批量删除选题变更申请（管理员）
     *
     * @param requestIds 需要删除的选题变更申请主键集合
     * @return 结果
     */
    public int deleteTopicChangeRequestByRequestIds(Long[] requestIds);

    /**
     * 删除选题变更申请信息（管理员）
     *
     * @param requestId 选题变更申请主键
     * @return 结果
     */
    public int deleteTopicChangeRequestByRequestId(Long requestId);

    /**
     * 检查学生是否可以提交变更申请
     *
     * @param studentId 学生ID
     * @return 是否可以提交
     */
    public boolean canStudentSubmitChangeRequest(Long studentId);

    /**
     * 检查申请是否属于指定学生
     *
     * @param requestId 申请ID
     * @param studentId 学生ID
     * @return 是否拥有
     */
    public boolean checkRequestOwner(Long requestId, Long studentId);

    /**
     * 检查申请的原教师是否为指定教师
     *
     * @param requestId 申请ID
     * @param teacherId 教师ID
     * @return 是否为原教师
     */
    public boolean checkRequestOldTeacher(Long requestId, Long teacherId);

    /**
     * 检查申请的新教师是否为指定教师
     *
     * @param requestId 申请ID
     * @param teacherId 教师ID
     * @return 是否为新教师
     */
    public boolean checkRequestNewTeacher(Long requestId, Long teacherId);
}